#include <iostream>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string>

#define SIZE 4096
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cout << "usege: " << argv[0] << "filename" << "\n";
        return 1;
    }
    std::string filename = argv[1];
    
    // 1.打开指定文件
    int fd = ::open(filename.c_str(),O_RDONLY,0666);
    if(fd < 0)
    {
        std::cerr<<"open "<<argv[1]<<"fail\n";
        return 2;
    }


    // 3.进行文件映射
    char* str = (char*)::mmap(nullptr,SIZE, PROT_READ,MAP_SHARED,fd,0);


    // 4.操作文件
    printf("%s",str);

    // 5.取消映射
    int n = ::munmap(str,SIZE);
    if(n < 0)
    {
        std::cerr<<"取消映射失败\n";
        return 4;
    }
    // 6.关闭文件
    ::close(fd);
}